﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Biz_Dal.Biz;
using System.Data.Linq.SqlClient;//SqlMethods.Like(...)

namespace Biz_Dal.Dal
{
    public class DalKhachHang
    {
        //BookIdeas_ShopDataContext htDataContext = new BookIdeas_ShopDataContext();

        //lấy id mới
        internal static int IdMaxKhachHang()
        {
            DalCommon dal = new DalCommon();
            int intIdt = dal.BookIdeas_ShopDataContext.KhachHangs.Max(u => u.idUser);
            return intIdt;
        }

        #region "Login"

        internal static List<BizKhachHang> Login(string user, string pass)
        {
            DalCommon dal = new DalCommon();
            var querry = (from kh in dal.BookIdeas_ShopDataContext.KhachHangs
                          where kh.tenDangNhap == user &&
                          kh.matKhau == pass
                          select new BizKhachHang
                          {
                              idUser = kh.idUser,

                              tenDangNhap = kh.tenDangNhap,

                              matKhau = kh.matKhau,

                              hoTen = kh.hoTen,

                              email = kh.email,

                              diaChi = kh.diaChi,

                              dienThoai = kh.dienThoai,

                              laQuanTri = (bool)kh.laQuanTri,

                              laUserXau = (bool)kh.laUserXau,

                              taiKhoan = kh.taiKhoan,

                          }).Distinct<BizKhachHang>();

            return querry.ToList<BizKhachHang>();
        }


        //Đăng nhập là khách hàng
        internal static List<BizKhachHang> LoginKhachHang(string user, string pass)
        {
            DalCommon dal = new DalCommon();
            var querry = (from kh in dal.BookIdeas_ShopDataContext.KhachHangs
                          where kh.tenDangNhap== user &&
                          kh.matKhau == pass && kh.laQuanTri == false
                          select new BizKhachHang
                          {
                              idUser = kh.idUser,

                              tenDangNhap = kh.tenDangNhap,

                              matKhau = kh.matKhau,

                              hoTen = kh.hoTen,

                              email = kh.email,

                              diaChi = kh.diaChi,

                              dienThoai = kh.dienThoai,

                              laQuanTri = (bool)kh.laQuanTri,

                              laUserXau = (bool)kh.laUserXau,

                              taiKhoan = kh.taiKhoan,

                          }).Distinct<BizKhachHang>();

            return querry.ToList<BizKhachHang>();
        }

        //Đăng nhập là admin
        internal static List<BizKhachHang> LoginAdmin(string user, string pass)
        {
            DalCommon dal = new DalCommon();
            var querry = (from kh in dal.BookIdeas_ShopDataContext.KhachHangs
                          where kh.tenDangNhap == user &&
                          kh.matKhau == pass && kh.laQuanTri == true
                          select new BizKhachHang
                          {
                              idUser = kh.idUser,

                              tenDangNhap = kh.tenDangNhap,

                              matKhau = kh.matKhau,

                              hoTen = kh.hoTen,

                              email = kh.email,

                              diaChi = kh.diaChi,

                              dienThoai = kh.dienThoai,

                              laQuanTri = (bool)kh.laQuanTri,

                              laUserXau = (bool)kh.laUserXau,

                              taiKhoan = kh.taiKhoan,

                          }).Distinct<BizKhachHang>();

            return querry.ToList<BizKhachHang>();
        }
        
        #endregion


        //Đếm tất cả các phần tử có trong bảng
        internal static int CountListKH()
        {
            DalCommon dal = new DalCommon();
            var query = (
                            from kh in dal.BookIdeas_ShopDataContext.KhachHangs
                            orderby kh.idUser
                            select kh
                        ).Count();
            return query;
        }

        //Lấy danh sách tất cả các khách hàng
        internal static List<BizKhachHang> getListKhachHangAll()
        {
            DalCommon dal = new DalCommon();
            var query = (
                            from kh in dal.BookIdeas_ShopDataContext.KhachHangs
                            orderby kh.idUser descending
                            select new BizKhachHang
                            {
                                idUser = kh.idUser,

                                tenDangNhap = kh.tenDangNhap,

                                matKhau = kh.matKhau,

                                hoTen = kh.hoTen,

                                email = kh.email,

                                diaChi = kh.diaChi,

                                dienThoai = kh.dienThoai,

                                laQuanTri = (bool)kh.laQuanTri,

                                laUserXau = (bool)kh.laUserXau,

                                taiKhoan = kh.taiKhoan,
                            }
                        ).Distinct<BizKhachHang>();
            return query.ToList<BizKhachHang>();
        }

        #region "Tìm kiếm"
        //Danh sách các khách hàng có mã khách hàng được nhập vào
        internal static BizKhachHang getKhachHangByID(int id)
        {
            DalCommon dal = new DalCommon();
            var querry = (from kh in dal.BookIdeas_ShopDataContext.KhachHangs
                          where kh.idUser == id
                          select new BizKhachHang
                          {
                              idUser = kh.idUser,

                              tenDangNhap = kh.tenDangNhap,

                              matKhau = kh.matKhau,

                              hoTen = kh.hoTen,

                              email = kh.email,

                              diaChi = kh.diaChi,

                              dienThoai = kh.dienThoai,

                              laQuanTri = (bool)kh.laQuanTri,

                              laUserXau = (bool)kh.laUserXau,

                              taiKhoan = kh.taiKhoan,
                          }).Distinct<BizKhachHang>();
            if (querry.Count() == 0)
            {
                return null;
            }
            else
            {
                return querry.Single<BizKhachHang>();
            }
        }


        //Lấy danh sách  khách hàng có tên đăng nhập được nhập vào
        internal static List<BizKhachHang> getKhachHangByUserName(string name)
        {
            DalCommon dal = new DalCommon();
            var querry = (from kh in dal.BookIdeas_ShopDataContext.KhachHangs
                          where kh.tenDangNhap == name
                          select new BizKhachHang
                          {
                              idUser = kh.idUser,

                              tenDangNhap = kh.tenDangNhap,

                              matKhau = kh.matKhau,

                              hoTen = kh.hoTen,

                              email = kh.email,

                              diaChi = kh.diaChi,

                              dienThoai = kh.dienThoai,

                              laQuanTri = (bool)kh.laQuanTri,

                              laUserXau = (bool)kh.laUserXau,

                              taiKhoan = kh.taiKhoan,
                          }).Distinct<BizKhachHang>();
            if (querry.Count() == 0)
            {
                return null;
            }
            else
            {
                return querry.ToList<BizKhachHang>();
            }
        }


        //Lấy danh sách tất cả các khách hàng có tên được nhập vào
        internal static List<BizKhachHang> getListKhachHangByName(string name)
        {
            DalCommon dal = new DalCommon();
            var querry = (from kh in dal.BookIdeas_ShopDataContext.KhachHangs
                          where kh.hoTen == name
                          select new BizKhachHang
                          {
                              idUser = kh.idUser,

                              tenDangNhap = kh.tenDangNhap,

                              matKhau = kh.matKhau,

                              hoTen = kh.hoTen,

                              email = kh.email,

                              diaChi = kh.diaChi,

                              dienThoai = kh.dienThoai,

                              laQuanTri = (bool)kh.laQuanTri,

                              laUserXau = (bool)kh.laUserXau,

                              taiKhoan = kh.taiKhoan,
                          }).Distinct<BizKhachHang>();
            if (querry.Count() == 0)
            {
                return null;
            }
            else
            {
                return querry.ToList<BizKhachHang>();
            }
        }

        

      
        //Lấy danh sách gần đúng tất cả các khách hàng có tên được nhập vào
        internal static List<BizKhachHang> getListLikeKhachHangByName(string name)
        {
            DalCommon dal = new DalCommon();
            var querry = (from kh in dal.BookIdeas_ShopDataContext.KhachHangs
                          where SqlMethods.Like(kh.hoTen, "%" + name + "%")
                          select new BizKhachHang
                          {
                              idUser = kh.idUser,

                              tenDangNhap = kh.tenDangNhap,

                              matKhau = kh.matKhau,

                              hoTen = kh.hoTen,

                              email = kh.email,

                              diaChi = kh.diaChi,

                              dienThoai = kh.dienThoai,

                              laQuanTri = (bool)kh.laQuanTri,

                              laUserXau = (bool)kh.laUserXau,

                              taiKhoan = kh.taiKhoan,
                          }).Distinct<BizKhachHang>();
            if (querry.Count() == 0)
            {
                return null;
            }
            else
            {
                return querry.ToList<BizKhachHang>();
            }
        }
        #endregion


        #region "Thêm - Xoá - Sửa"
        //Thêm khách hàng
        internal static void insertKhachHang(BizKhachHang khDTO)
        {
            DalCommon dal = new DalCommon();
            KhachHang kh = new KhachHang();

            //kh.idUser = khDTO.idUser;

            kh.tenDangNhap = khDTO.tenDangNhap;

            kh.matKhau = khDTO.matKhau;

            kh.hoTen = khDTO.hoTen;

            kh.email = khDTO.email;

            kh.diaChi = khDTO.diaChi;

            kh.dienThoai = khDTO.dienThoai;

            kh.laQuanTri = (bool)khDTO.laQuanTri;

            kh.laUserXau = (bool)khDTO.laUserXau;

            kh.taiKhoan = khDTO.taiKhoan;

            //htDataContext.GetTable<KhachHang>().InsertOnSubmit(kh);
            dal.BookIdeas_ShopDataContext.KhachHangs.InsertOnSubmit(kh);
            dal.BookIdeas_ShopDataContext.SubmitChanges();
        }

        //Xóa khách hàng
        internal static void deleteKhachHang(int id)
        {
            DalCommon dal = new DalCommon();
            var querry = (from kh in dal.BookIdeas_ShopDataContext.KhachHangs
                          where kh.idUser == id
                          select kh).FirstOrDefault<KhachHang>();
            dal.BookIdeas_ShopDataContext.KhachHangs.DeleteOnSubmit(querry);
            dal.BookIdeas_ShopDataContext.SubmitChanges();
        }

        //Sửa khách hàng
        internal static void updateKhachHang(BizKhachHang khDTO)
        {
            DalCommon dal = new DalCommon();
            var querry = (from kh in dal.BookIdeas_ShopDataContext.KhachHangs
                          where kh.idUser == khDTO.idUser
                          select kh).FirstOrDefault<KhachHang>();

                //var querry = dal.BookIdeas_ShopDataContext.KhachHangs.Where(p => p.idUser == khDTO.idUser).FirstOrDefault();

                //querry.idUser = khDTO.idUser;

                querry.tenDangNhap = khDTO.tenDangNhap;

                querry.matKhau = khDTO.matKhau;

                querry.hoTen = khDTO.hoTen;

                querry.email = khDTO.email;

                querry.diaChi = khDTO.diaChi;

                querry.dienThoai = khDTO.dienThoai;

                querry.laQuanTri = khDTO.laQuanTri;

                querry.laUserXau = khDTO.laUserXau;

                querry.taiKhoan = khDTO.taiKhoan;

                dal.BookIdeas_ShopDataContext.SubmitChanges();

        }
        #endregion

        internal static void suaUserBad(int id, bool badUser, bool admin)
        {
            DalCommon dal = new DalCommon();
            var querry = (from kh in dal.BookIdeas_ShopDataContext.KhachHangs
                          where kh.idUser == id
                          select kh).FirstOrDefault<KhachHang>();
            querry.laUserXau = badUser;
            querry.laQuanTri = admin;

            dal.BookIdeas_ShopDataContext.SubmitChanges();
        }

        

    }
}
